import api from './api';
import { Novel, NovelChapter, NovelQueryParams } from '../types/novel';
import { PageResponse } from '../types/pageType';

/**
 * 获取小说列表
 * @param params 查询参数
 * @returns 小说列表及分页信息
 */
export async function fetchNovels(params: NovelQueryParams): Promise<PageResponse<Novel>> {
  try {
    const response = await api.get<PageResponse<Novel>>('api/novel/listPage', { params: params });
    return response.data;
  } catch (error) {
    console.error('获取小说列表失败:', error);
    throw new Error('获取小说列表失败，请重试');
  }
}

/**
 * 获取小说详情
 * @param id 小说ID
 * @returns 小说详情
 */
export async function getNovelDetail(id: string): Promise<Novel> {
  try {
    const response = await api.get<Novel>(`api/novel/${id}`);
    return response.data;
  } catch (error) {
    console.error(`获取小说${id}详情失败:`, error);
    throw new Error('获取小说详情失败，请重试');
  }
}

/**
 * 创建新小说
 * @param novel 小说信息
 * @returns 创建的小说
 */
export async function createNovel(novel: Novel): Promise<void> {
  try {
    await api.post<Novel>('api/novel', novel);
  } catch (error) {
    console.error('创建小说失败:', error);
    throw new Error('创建小说失败，请重试');
  }
}

/**
 * 更新小说
 * @param id 小说ID
 * @param novel 小说更新信息
 * @returns 更新后的小说
 */
export async function updateNovel(novel: Novel): Promise<void> {
  try {
    await api.put<Novel>(`api/novel`, novel);
  } catch (error) {
    console.error(`更新小说失败:`, error);
    throw new Error('更新小说失败，请重试');
  }
}

/**
 * 删除小说
 * @param id 小说ID
 */
export async function deleteNovel(id: string): Promise<void> {
  try {
    await api.delete(`api/novel/${id}`);
  } catch (error) {
    console.error(`删除小说${id}失败:`, error);
    throw new Error('删除小说失败，请重试');
  }
}
/**
 * 查询小说章节
 * @param id 小说ID
 * @param page 页码
 * @param pageSize 每页数量
 * @returns 小说章节列表及分页信息
 */
export async function queryNovelChapters(id: string, page: number, pageSize: number): Promise<PageResponse<NovelChapter>> {
  try {
    const response = await api.get<PageResponse<NovelChapter>>(
      `api/novel/chapter/listPage`,
      {
        params: {
          pageNum: page,
          pageSize: pageSize,
          novelId: id,
        },
      }
    );
    return response.data;
  } catch (error) {
    console.error(`查询小说章节${id}失败:`, error);
    throw new Error('查询小说章节失败，请重试');
  }
}
/**
 * 查询小说章节详情
 * @param id 小说章节ID
 * @returns 小说章节详情
 */
export async function queryNovelChapter(id: string): Promise<NovelChapter> {
  try {
    const response = await api.get<NovelChapter>(`api/novel/chapter/${id}`);
    return response.data;
  } catch (error) {
    console.error(`查询小说章节${id}失败:`, error);
    throw new Error('查询小说章节失败，请重试');
  }
}
/**
 * 添加小说章节
 * @param chapter 小说章节信息
 */
export async function addNovelChapter(chapter: NovelChapter): Promise<void> {
  try {
    await api.post(`api/novel/chapter`, chapter);
  } catch (error) {
    console.error(`添加小说章节失败:`, error);
    throw new Error('添加小说章节失败，请重试');
  }
}
/**
 * 更新小说章节
 * @param chapter 小说章节信息
 */
export async function updateNovelChapter(chapter: NovelChapter): Promise<void> {
  try {
    await api.put(`api/novel/chapter`, chapter);
  } catch (error) {
    console.error(`更新小说章节失败:`, error);
    throw new Error('更新小说章节失败，请重试');
  }
}
/**
 * 删除小说章节
 * @param id 小说章节ID
 */
export async function deleteNovelChapter(id: string): Promise<void> {
  try {
    await api.delete(`api/novel/chapter/${id}`);
  } catch (error) {
    console.error(`删除小说章节${id}失败:`, error);
    throw new Error('删除小说章节失败，请重试');
  }
}

/**
 * 读取小说章节
 * @param id 小说章节ID
 */
export async function readNovelChapter(novelId: string, filePath: string): Promise<void> {
  try {
    await api.post(`api/novel/chapter/read`, { novelId, filePath }, {
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
      }
    });
  } catch (error) {
    console.error(`读取小说章节${novelId}失败:`, error);
    throw new Error('读取小说章节失败，请重试');
  }
}
